iT邦幫忙

2022 iThome 鐵人賽

DAY 16
0
自我挑戰組

用Python學習網路爬蟲30天系列 第 16

[Day16] 動態網頁擷取3_與HTML表單進行互動

  • 分享至 

  • xImage
  •  

與HTML表單進行互動

Selenium可以模擬使用者在網頁中和表單的互動過程。下方整理了以程式來做簡單的網頁搜尋流程:

首先,我們要從程式監測谷歌瀏覽器至指定的網頁。加入implicitly_wait()函數以確保等待時間內讓瀏覽器開啟。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

s = Service("chromedriver.exe")
driver = webdriver.Chrome(service=s)
driver.implicitly_wait(10)
driver.get("指定的網頁網址")


接著,用Selenium定位函數標示要執行動作的HTML元素,再使用send_keys()函數或使用click()函數來達成網頁的搜尋或登入頁面的過程。

  • send_keys():表示執行的鍵盤動作。
  • click():表現點選指定項目的動作。
定位目標 = driver.find_element(By.XX, " ")
定位目標.send_keys()
定位目標.click()


搜尋或登入完後,及可以用定位函數find_element(s)(By.XX, " ")定位要取得的資料的位置並擷取下來了!

實作練習

  1. 模擬在Google瀏覽器搜尋並擷取搜尋結果的標題與連結

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.chrome.service import Service
    
    s = Service("chromedriver.exe")
    driver = webdriver.Chrome(service=s)
    driver.implicitly_wait(10)
    driver.get("https://www.google.com.tw")
    
    #XPath定位出搜尋欄的HTML元素
    keyword = driver.find_element(By.XPATH, "//input[@class='gLFyf gsfi']")
    keyword.send_keys("輔仁大學")
    keyword.send_keys(Keys.ENTER);
    
    #XPath定位搜尋結果項目
    items = driver.find_elements(By.XPATH, "//div[@class='MjjYud']")
    
    HTML標籤定位搜尋結果項目的名稱和連結並擷取文字
    for item in items:
        h3 = item.find_element(By.TAG_NAME, "h3")
        print(h3.text)
        a = item.find_element(By.TAG_NAME, "a")   
        print(a.get_attribute("href"))
    
    driver.quit()
    

    程式執行畫面:

    搜尋"輔仁大學"並按下Enter鍵
    https://ithelp.ithome.com.tw/upload/images/20220930/20152180o3khDUCu2z.png
    https://ithelp.ithome.com.tw/upload/images/20220930/20152180ZRRJpmnxEG.png

    擷取結果:

    相關標題與連結
    https://ithelp.ithome.com.tw/upload/images/20220930/20152180XWgaTbwXr4.png

  2. 模擬登入學生資訊入口網網站並擷取課程學習下的欄位文字與數字內容

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.service import Service
    import time
    
    s = Service("chromedriver.exe")
    driver = webdriver.Chrome(service=s)
    driver.implicitly_wait(10)
    driver.get("https://portal.fju.edu.tw/student/Account/Login")
    
    #CSS選擇器定位出與帳號、密碼與登入按鈕的欄位,並執行輸入和點選的動作
    username = "409570183"
    password = "************"
    user = driver.find_element(By.CSS_SELECTOR, "#UserID")
    user.send_keys(username)
    pwd = driver.find_element(By.CSS_SELECTOR, "#Password")
    pwd.send_keys(password)
    button = driver.find_element(By.CSS_SELECTOR, "#btnLogin")
    button.click()
    time.sleep(10)
    
    #XPath定位搜尋的文字並印出
    items = driver.find_elements(By.XPATH, "//div/div[@class='col-xs-9 text-right']")
    p = driver.find_element(By.XPATH, "//div[@class='row'][4]/div/h3")
    print(p.text)
    for item in items:
        print(item.text)
    
    driver.quit()
    

    程式執行畫面:

    登入帳號與密碼,完成後按登入鍵
    https://ithelp.ithome.com.tw/upload/images/20220930/20152180Q6BzZK1Ibr.png
    https://ithelp.ithome.com.tw/upload/images/20220930/20152180pRGoSFwLv3.png
    https://ithelp.ithome.com.tw/upload/images/20220930/20152180oqyprgizTU.png

    擷取結果:

    課程學習下的欄位文字與數字
    https://ithelp.ithome.com.tw/upload/images/20220930/20152180r0HIQ1fHjg.png


上一篇
[Day15] 動態網頁擷取2_Selenium網頁資料定位函數
下一篇
[Day17] 動態網頁擷取4_JavaScript動態網頁擷取
系列文
用Python學習網路爬蟲30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言